﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

namespace CowboyAndZombies
{
    public class Tiro
    {
        public Texture2D textura;
        public Vector2 posicao;
        public bool ativo;
        public int Damage;
        public int Width
        {
            get { return textura.Width; }
        }
        public int Height
        {
            get { return textura.Height; }
        }
        float velocidadeMovimentoTiro;
        float angulo;
        TimeSpan tempoTiro;
        TimeSpan tempoTiroAnterior;

        public Tiro(GameWindow window, Cursor cursor)
        {
            ativo = true;

            Damage = 2;

            velocidadeMovimentoTiro = 20f;
            tempoTiro = TimeSpan.FromSeconds(.2f);
        }

        public void Update(GameTime gameTime, GameWindow window, Cowboy cowboy, Cursor cursor, Texture2D texturaTiro, ref List<Tiro> listaTiro)
        {
            MouseState mouse = Mouse.GetState();

            if (gameTime.TotalGameTime - tempoTiroAnterior > tempoTiro)
            {

                if (mouse.LeftButton == ButtonState.Pressed)
                {
                    tempoTiroAnterior = gameTime.TotalGameTime;

                    Tiro tiro = new Tiro(window, cursor);
                    tiro.textura = texturaTiro;
                    tiro.posicao.X = cowboy.posicao.X;
                    tiro.posicao.Y = cowboy.posicao.Y;
                    tiro.angulo = cowboy.angulo;

                    listaTiro.Add(tiro);
                }
            }
            for (int i = listaTiro.Count - 1; i >= 0; i--)
            {
                listaTiro[i].MovimentarTiro(window, cursor);

                if (listaTiro[i].ativo == false)
                {
                    listaTiro.RemoveAt(i);
                }
            }

        }

        public void Draw(SpriteBatch spriteBatch, List<Tiro> listaTiro)
        {
            // Desenha os tiros
            for (int i = 0; i < listaTiro.Count; i++)
            {
                listaTiro[i].AnimacaoTiro(spriteBatch);
            }
        }

        private void MovimentarTiro(GameWindow window, Cursor cursor)
        {
            posicao.X -= (float)(velocidadeMovimentoTiro * Math.Cos(angulo));
            posicao.Y -= (float)(velocidadeMovimentoTiro * Math.Sin(angulo));

            // Desativa o tiro caso passe o fim da window
            if (posicao.X + textura.Width / 2 > window.ClientBounds.Width)
                ativo = false;
        }

        private void AnimacaoTiro(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(textura, posicao, null, Color.White, angulo, new Vector2(Width / 2, Height / 2), 1f, SpriteEffects.None, 0f);
        }


    }
}
